// 相当于导包, 引用另一个js里的内容
document.write("<script language=javascript src='/static/js/common_functions.js'></script>");

var countdown = 60;

function settime(obj) {
    if (countdown == 0) {
        obj.removeAttribute("disabled");
        obj.value = "重新获取验证码";
        countdown = 60;
        return;
    } else {
        obj.setAttribute("disabled", true);
        obj.value = "重新发送(" + countdown + ")";
        countdown--;
    }

    setTimeout(function () {
        settime(obj)
    }, 1000)
}

// layui 的 JS 使用, 都是要最开始用 layui.use
layui.use(['form', 'layer'], function () {
    var form = layui.form;
    var layer = layui.layer;
    form.render();

    // 初始化中间变量
    var val_email = "";
    var val_phone_num = "";
    var val_user_name = "";
    var val_password = "";
    var val_password_again = "";
    var Encrypted_pd = ""; // 加密后的密码变量

    // 初始化一个变量, 作为判断是否发送手机验证码的依据
    var can_send_pvcode = false;

    // 确定一个flag, 判断后续是否执行
    var do_next_flag = true;

    // 检测操作, 放到提价表单前边, 当每一个输入框失去焦点时, 触发操作
    $("#username").blur(function () {
        // 要确保用户名唯一
        // 用户名和密码非空的判断, layUI已经自动实现了
        val_user_name = $("#username").val();
        if (!IsEmpty(val_user_name)) {

            // 限定用户名最大长度为50
            if (val_user_name.length <= 50) {
                if (JudgeUsername(val_user_name)) {
                    // 先判断用户名的格式符合要求: 只能是字母, 数字, 下划线组合, 并且数字不能放在开头, 不能包含特殊字符, 可以为汉字
                    // 符合要求之后, 再检测用户输入的用户名是否已被注册
                    $.ajax({
                        type: "get",
                        url: "check_msg/?user_name=" + val_user_name,
                        success: function (data) {
                            if (data.length > 0) {
                                // 长度大于零, 说明数据库中有此用户名
                                if (data[0].user_name != null) {
                                    layer.msg("该用户名已被注册 !");
                                    $("#username").select();
                                    do_next_flag = false;
                                } else {
                                    do_next_flag = true;
                                }
                            } else {
                                do_next_flag = true;
                            }
                        },
                        error: function (data) {
                            do_next_flag = false;
                        }
                    })

                } else {
                    layer.msg("该用户名不符合要求格式 !");
                    $("#username").select();
                    do_next_flag = false;
                }
            } else {
                layer.msg("用户名长度不能超过50个字符 !");
                do_next_flag = false;
            }
        }
    });

    $("#passwd").blur(function () {
        val_password = $("#passwd").val();
        val_password_again = $("#passwd_again").val();

        if (!IsEmpty(val_password) && !IsEmpty(val_password_again)) {
            // 要确保密码符合要求, 必须要包含字母大小写, 数字, 下划线, 特殊字符, 不得包含汉字
            // 密码长度要在: 8~16 范围内
            if (!JudgePassWord(val_password) || !JudgePassWord(val_password_again)) {
                layer.msg("密码不符合要求 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
            }
            // 再验证: 密码和确认密码, 两个值是否相同
            if (val_password != val_password_again) {
                layer.msg("密码和确认密码不一致 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
                // 密码提交要加密
                Encrypted_pd = aesEncrypt(val_password);
            }
            // 密码非空的判定, layUI已经内置, 不用再自己写
        }

    });

    $("#passwd_again").blur(function () {
        val_password = $("#passwd").val();
        val_password_again = $("#passwd_again").val();

        if (!IsEmpty(val_password_again) && !IsEmpty(val_password)) {
            if (!JudgePassWord(val_password) || !JudgePassWord(val_password_again)) {
                layer.msg("密码不符合要求 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
            }
            // 再验证: 密码和确认密码, 两个值是否相同
            if (val_password != val_password_again) {
                layer.msg("密码和确认密码不一致 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
                // 密码提交要加密
                Encrypted_pd = aesEncrypt(val_password);
            }
            // 确认密码非空的判定, layUI已经内置, 不用再自己写
        }

    });

    $("#email").blur(function () {
        val_email = $("#email").val();
        if (do_next_flag) {
            if (!IsEmpty(val_email)) {

                // TODO: 限定用户名最大长度为50
                if (val_email.length <= 50) {

                    // 用户输入了邮箱地址
                    if (JudgeEMail(val_email)) {
                        // 用户输入的邮箱格式正确
                        $.ajax({
                            type: "get",
                            url: "check_msg/?email=" + val_email,
                            success: function (data) {
                                if (data.length > 0) {
                                    if (data[0].email != null) {
                                        layer.msg("该邮箱已被绑定 !");
                                        $("#email").select();
                                        do_next_flag = false;
                                    } else {
                                        do_next_flag = true;
                                    }
                                } else {
                                    do_next_flag = true;
                                }
                            },
                            error: function (data) {
                                do_next_flag = false;
                            }
                        })
                    } else {
                        layer.msg("邮箱格式不符合要求 !");
                        $("#email").select();
                        do_next_flag = false;
                    }

                } else {
                    layer.msg("电子邮箱长度不能超过50个字符 !");
                    do_next_flag = false;
                }
            }
        }
    });

    $("#phone").blur(function () {
        val_phone_num = $("#phone").val();
        if (!IsEmpty(val_phone_num)) {
            if (JudgePhoneNum(val_phone_num)) {
                // 用户输入的手机号格式正确
                $.ajax({
                    type: "get",
                    url: "check_msg/?phone_num=" + val_phone_num,
                    success: function (data) {
                        if (data.length > 0) {
                            if (data[0].phone_num != null) {
                                layer.msg("该手机号已被绑定 !");
                                $("#phone").select();
                                do_next_flag = false;
                                can_send_pvcode = false;

                            } else {
                                can_send_pvcode = true;
                                do_next_flag = true;
                            }
                        } else {
                            can_send_pvcode = true;
                            do_next_flag = true;
                        }
                    },
                    error: function (data) {
                        do_next_flag = false;
                        can_send_pvcode = false;
                    }
                })

            } else {
                layer.msg("手机号格式不符合要求 !");
                $("#phone").select();
                do_next_flag = false;
                can_send_pvcode = false;
            }
        }
    });

    // todo 发送手机验证码的操作
    $("#get_phone_vcode").click(function () {
        console.log(can_send_pvcode);
        if (can_send_pvcode) {
            // 经过上边的判断之后, 才能发送手机验证码
            $.ajax({
                type: "POST",
                url: "phone_vcode/",
                Accept:"application/json;charset=utf-8",
                ContentType:"application/x-www-form-urlencoded;charset=utf-8",
                data: {
                    phone_num: val_phone_num,
                },
                async: true,
                success: function (data) {
                    
                }
            })

        } else {
            // 提示用户, 检查手机号的输入
            layer.msg("请检查输入的手机号是否正确 !");
        }
    });

    // 在提交表单时, 检测手机/邮箱是否被绑定
    form.on('submit(srm)', function (data) {
        // data 是一个字典, 能获取到此表单的数据, 字段的名字, 就是HTML输入框input的name属性的值
        // 检测五个变量是否符合要求
        var phone_vcode = $("#phone_vcode").val();

        console.log(do_next_flag);

        if (do_next_flag) {
            if (IsEmpty(val_email) && IsEmpty(val_phone_num)) {
                layer.msg("邮箱/手机, 请至少绑定其中一个 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
            }
        }

        // 如果是邮箱, 那么就跳转到等待邮箱确认的界面
        if (do_next_flag) {
            if (!IsEmpty(val_email)) {
                // 打开一个新页签, 等待用户确认邮箱
                $.ajax({
                    type: "post",
                    url: "add_user/",
                    ContentType: "application/x-www-form-urlencoded;charset=utf-8",
                    data: {
                        user_id: aesEncrypt(val_user_name).replace(/=/g, "o").replace(/&/g, "o"),
                        user_name: val_user_name,
                        password: Encrypted_pd,
                        email: val_email,
                        phone_num: val_phone_num,
                        roles: "admin",
                        vf_mail: false,
                        vf_phone: false,
                        phone_vcode: phone_vcode,
                        registration_time: getNowFormatDate(),  // 注册时间
                    },
                })

                do_next_flag = false;
                var new_url = StringFormat("http://127.0.0.1:8000/users/email_activation_page?username={0}&email={1}", 
                        val_user_name, val_email);
                window.location.replace(new_url);
            }
        }

        if (do_next_flag) {
            if (!IsEmpty(val_phone_num) && IsEmpty(phone_vcode)) {
                layer.msg("请输入手机验证码 !");
                do_next_flag = false;
            } else {
                do_next_flag = true;
            }
        }

        if (do_next_flag) {
            // 将用户输入的信息, 发送给服务器
            if (do_next_flag) {
                $.ajax({
                    type: "post",
                    url: "add_user/",
                    ContentType: "application/x-www-form-urlencoded;charset=utf-8",
                    data: {
                        user_id: aesEncrypt(val_user_name).replace(/=/g, "o").replace(/&/g, "o"),
                        user_name: val_user_name,
                        password: Encrypted_pd,
                        email: val_email,
                        phone_num: val_phone_num,
                        roles: "admin",
                        vf_mail: false,
                        vf_phone: false,
                        phone_vcode: phone_vcode,
                        registration_time: getNowFormatDate(),  // 注册时间
                    },
                    success: function (data) {
                        // 注册成功之后, 要将界面跳转到首页
                        var new_url = StringFormat("http://127.0.0.1:8000/homepage/all_items?username={0}&login_flag=True", 
                        val_user_name);
                        window.location.replace(new_url);
                    },
                    error: function(data){
                        // todo 服务器返回错误信息
                        console.log(data);
                    }
                })
            }
        }
        
        do_next_flag = true;
        return false; // 组织表单提交后, 自动刷新清空的操作
    });
});
